package gomz.pres;


import gomz.ClientToServerCon;
import gomz.GlobalRes;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import javax.swing.JOptionPane;


/**
 * Diese Klasse ist der Controller von Login
 * @author Neuenschwander
 *
 * 
 */ 


public class CLogin {
//********************************************************************************
// Variablen
// ********************************************************************************
	
	
	private MLogin model;
	private GUILogin view;
	private LoadingScreenDialog lsd;

	
//*********************************************************************************
// Konstruktor
// ********************************************************************************
    /**
     * Konstruktor von CLogin, model und view starten
    */
	public CLogin(String ip, int port) {
	
		model = new MLogin();
		view = new GUILogin();
		addListener();
		//Eingegebene Parameter setzen
        try {
			ClientToServerCon cts = new ClientToServerCon(ip, port);
			GlobalRes.setCon(cts);
		} catch (Exception e) {
			JOptionPane.showMessageDialog(view, "Falsche Parameter angegeben, oder Server l\u00e4uft nicht.", "Verbindung fehlgeschlagen", JOptionPane.ERROR_MESSAGE);
			System.exit(0);
		}    
	}

// ********************************************************************************
// Listener
// ********************************************************************************
	private void addListener(){
		
	view.getBtLok().addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent e) {
			doLogin();	
		}
	});
	
	view.getBtLcan().addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent e){
			doClose();
		}
	});
	
	view.getBtLreg().addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent e) {
			doRegister();
		}
	});
	}
	
// ********************************************************************************
// Methoden
// ********************************************************************************
	
    /**
     * Diese Methode verschl�sselt das Passwort, und sendet es zusammen mit dem User ans Model
    */
	private void doLogin(){
		
		//LoadingScreen wird gestartet
		lsd = new LoadingScreenDialog("Program wird gestartet...");
		//Login wird deaktiviert f�r die Zeit des Logins
		view.setEnabled(false);
		Thread loginThread = new Thread(){
			public void run(){
				//MD5 Verschl�sselung des Passworts
				MessageDigest md;
				StringBuffer sb = null;
				try {
					md = MessageDigest.getInstance("MD5");
					md.update(new String(view.getPfLpw().getPassword()).getBytes());
					byte[] digest = md.digest();
					sb = new StringBuffer();
					for (byte b : digest) {
						sb.append(Integer.toHexString((int) (b & 0xff)));
					}
				} catch (NoSuchAlgorithmException e) {
					e.printStackTrace();
				}
				//Wenn Login erfolgreich
				if (model.login(view.getTfLuser().getText(), sb.toString())){	
					//Main Controller starten
					CMain cq = new CMain();
					//LoadingScreen schliessen
					lsd.dispose();
					//GUILogin schliessen
					view.dispose();
					
				} else {
					//LoadingScreen schliessen
					lsd.dispose();
					//Login Fenster aktivieren
					view.setEnabled(true);
					//Fehlermeldung ausgeben
					JOptionPane.showMessageDialog(view, "Falscher Username oder Passwort eingegeben.", "Login fehlgeschlagen", JOptionPane.ERROR_MESSAGE);
				}
			}
		};
		//Thread starten
		loginThread.start();
	}
    /**
     * Diese Methode sendet das GUILogin ans Model in der Methode createUser
    */
	private void doRegister(){
		model.createUser(view);
	}
    /**
     * Diese Methode beendet das Programm
    */
	private void doClose(){
		System.exit(0);
	}
	
}